首页 > 试题广场 >

比较版本号

[编程题]比较版本号
  • 热度指数:100212 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛客项目发布项目版本时会有版本号,比如1.02.11,2.14.4等等
现在给你2个版本号version1和version2,请你比较他们的大小
版本号是由修订号组成,修订号与修订号之间由一个"."连接。1个修订号可能有多位数字组成,修订号可能包含前导0,且是合法的。例如,1.02.11,0.1,0.2都是合法的版本号
每个版本号至少包含1个修订号。
修订号从左到右编号,下标从0开始,最左边的修订号下标为0,下一个修订号下标为1,以此类推。

比较规则:
一. 比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较忽略任何前导零后的整数值。比如"0.1"和"0.01"的版本号是相等的
二. 如果版本号没有指定某个下标处的修订号,则该修订号视为0。例如,"1.1"的版本号小于"1.1.1"。因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1
三.  version1 > version2 返回1,如果 version1 < version2 返回-1,不然返回0.

数据范围:
version1 和 version2 的修订号不会超过int的表达范围,即不超过 32 位整数 的范围

进阶: 空间复杂度 , 时间复杂度
示例1

输入

"1.1","2.1"

输出

-1

说明

version1 中下标为 0 的修订号是 "1",version2 中下标为 0 的修订号是 "2" 。1 < 2,所以 version1 < version2,返回-1
示例2

输入

"1.1","1.01"

输出

0

说明

version2忽略前导0,为"1.1",和version相同,返回0          
示例3

输入

"1.1","1.1.1"

输出

-1

说明

"1.1"的版本号小于"1.1.1"。因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1,所以version1 < version2,返回-1          
示例4

输入

"2.0.1","2"

输出

1

说明

version1的下标2>version2的下标2,返回1          
示例5

输入

"0.226","0.36"

输出

1

说明

226>36,version1的下标2>version2的下标2,返回1          
class Solution:
    def compare(self , version1: str, version2: str):
        v1=version1.split('.')
        v2=version2.split('.')
        len1=len(v1)
        len2=len(v2)
        len3=0
        if len2>len1:
            len3=len1
        else :len3=len2
        i=0
        while i<len3 and v1[i]:
            if int(v1[i])==int(v2[i]):
                i+=1
            elif int(v1[i])>int(v2[i]):
                return 1
            elif int(v1[i])<int(v2[i]):
                return -1
        if i<len1:
            while i<len1:
                i+=1
            if int(v1[i-1])>0:
                return 1
            else:return 0
        elif i<len2:
            while i<len2:
                i+=1
            if int(v2[i-1])>0:
                return 1
            else:return 0
        else:
            return 0

发表于 2023-04-08 23:48:24 回复(0)
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        v1_list = version1.split('.')
        v2_list = version2.split('.')
        l1, l2 = len(v1_list), len(v2_list)
        v1_list += ['0'] * l2
        v2_list += ['0'] * l1
        for i in range(l1 + l2):
            if int(v1_list[i]) > int(v2_list[i]):
                return 1
            elif int(v1_list[i]) < int(v2_list[i]):
                return -1
        return 0

发表于 2022-10-21 17:07:02 回复(0)
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        v1 = version1.split(".")
        v2 = version2.split(".")
        l1 = len(v1)
        l2 = len(v2)
        length = l1 if l1 > l2 else l2
        i = 0
        while i < length:
            a, b = 0, 0
            if i < l1:
                a = v1[i]
            if i < l2:
                b = v2[i]
            a = int(a)
            b = int(b)
            if a == b:
                i = i + 1
                continue
            if a > b:
                return 1
            if a < b:
                return -1
        return 0

发表于 2022-09-10 19:25:19 回复(0)
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 比较版本号
# @param version1 string字符串 
# @param version2 string字符串 
# @return int整型
#
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        # write code here
        l1=version1.split('.')
        l2=version2.split('.')
        for i in range(0,max(len(l1),len(l2))):
            if i<len(l1):#关键在于这里的判断
                s1=l1[i]
            else:
                s1=0
            if i<len(l2):
                s2=l2[i]
            else:
                s2=0
            if int(s1) <int(s2):
                return -1
            if int(s1) >int(s2):
                return 1
        return 0

发表于 2022-08-19 08:50:50 回复(0)
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        # write code here
        a = version1.split('.')
        b = version2.split('.')
        for i in range(len(a)):
            a[i] = str(int(a[i]))
        for i in range(len(b)):
            b[i] = str(int(b[i]))
        m = len(a) if len(a) > len(b) else len(b)
        while (len(a) < m):
            a.append('0')
        while (len(b) < m):
            b.append('0')
        if int(''.join(a)) < int(''.join(b)):
            return -1
        elif int(''.join(a)) > int(''.join(b)):
            return 1
        else:
            return 0

发表于 2022-07-30 00:32:53 回复(0)
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        alist = version1.split('.')
        blist = version2.split('.')
        length = len(alist) if len(alist) > len(blist) else len(blist)
        if len(alist) <= len(blist):
            alist += [0] * (length - len(alist))
        else:
            blist += [0] * (length - len(blist))
        for i in range(length):
            if int(alist[i]) > int(blist[i]):
                return 1
            elif int(alist[i]) < int(blist[i]):
                return -1
        return 0

发表于 2022-07-27 15:12:26 回复(1)
python:
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        # write code here
        ver1 = list(version1.split('.'))
        ver2 = list(version2.split('.'))
        ver1_len = len(ver1)
        ver2_len = len(ver2)
        # 补齐两个数组的长度,便于比较
        for i in range(ver2_len):
            ver1.append(0)
        for i in range(ver1_len):
            ver2.append(0)
        
        for i in range(len(ver1)):
            if int(ver1[i]) < int(ver2[i]):
                return -1
            if int(ver1[i]) > int(ver2[i]):
                return 1
        return 0

发表于 2022-07-21 11:25:22 回复(0)
class Solution:
    def compare(self , v1: str, v2: str) -> int:
        p1 = 0
        p2 = 0
        n1 = len(v1)
        n2 = len(v2)
        
        while p1 < n1&nbs***bsp;p2 < n2:
            num1 = 0
            num2 = 0
            
            while p1 < n1 and v1[p1] != '.':
                num1 = num1 * 10 + (ord(v1[p1]) - ord('0'))
                p1 += 1
                
            while p2 < n2 and v2[p2] != '.':
                num2 = num2 * 10 + (ord(v2[p2]) - ord('0'))
                p2 += 1
                
            if num1 > num2:
                return 1
            elif num1 < num2:
                return -1

            # 下一轮
            p1 += 1
            p2 += 1
        return 0

发表于 2022-07-20 11:18:33 回复(0)

class Solution:
    def compare(self , version1: str, version2: str) -> int:
        a=[int(s) for s in version1.split('.')]
        b=[int(s) for s in version2.split('.')]
        n=max(len(a),len(b))
        if a<b:
            for i in range(n-len(a)):
                a.append(0)
        elif a>b:
            for i in range(n-len(b)):
                b.append(0)
        for i in range(n):
            if a[i]<b[i]:
                return -1
            elif a[i]>b[i]:
                return 1
            elif a[i]==b[i] and i ==n-1:
                return 0

发表于 2022-05-04 20:36:15 回复(0)
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        # write code here
        fill0 = abs(len(version1) - len(version2))
        if len(version1) < len(version2):
            version1 = version1 + ".0" * fill0
        else:
            version2 = version2 + ".0" * fill0
        l1 = version1.split(".")
        l2 = version2.split(".")
        lmin = min(len(l1), len(l2))
        for i in range(lmin):
            if int(l1[i]) < int(l2[i]): return -1
            if int(l1[i]) > int(l2[i]): return 1
        return 0

发表于 2022-03-24 18:11:28 回复(1)
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 比较版本号
# @param version1 string字符串 
# @param version2 string字符串 
# @return int整型
#
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        # write code here

        version1=[int(s) for s in version1.split('.')]
        version2=[int(s) for s in version2.split('.')]
        l1=len(version1)
        l2=len(version2)
        if l1<l2:
            for i in range(l2-l1):
                version1.append(0)
        else:
            for i in range(l1-l2):
                version2.append(0)
        count=0
        for i in range(len(version1)):
            if version1[i]<version2[i]:
                return -1
            elif version1[i]>version2[i]:
                return 1
            elif  version1[i] == version2[i]:
                pass
        return 0
发表于 2022-03-18 12:13:26 回复(0)
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        # write code here
        v1 = version1.split('.')
        v2 = version2.split('.')
        if len(v1) < len(v2):
            for _ in range(len(v2) - len(v1)):
                v1.append(0)
        if len(v1) > len(v2):
            for _ in range(len(v1) - len(v2)):
                v2.append(0)

        assert len(v1) == len(v2)
        
        for i in range(len(v1)):
            if int(v1[i]) == int(v2[i]):
                continue
            elif int(v1[i]) > int(v2[i]):
                return 1
            else:
                return -1
        
        return 0

发表于 2022-03-10 16:33:08 回复(0)
class Solution:
    def compare(self , version1, version2):
        v1=list(map(int,version1.split('.')))
        v2=list(map(int,version2.split('.')))
        l1,l2=len(v1),len(v2)
        l=max(l1,l2)
        if l1<l2:
            v1.extend([0]*(l2-l1))
        else:
            v2.extend([0]*(l1-l2))
        for i in range(l):
            if v1[i]>v2[i]:
                return 1
            elif v1[i]<v2[i]:
                return -1
        return 0

发表于 2022-03-10 15:40:44 回复(0)
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        # write code here
        v1 = version1.split('.')
        v2 = version2.split('.')
        l = max(len(v1), len(v2))
        
        for i in range(l):
            cv1 = 0
            cv2 = 0
            if i < len(v1):
                cv1 = int(v1[i])
            if i < len(v2):
                cv2 = int(v2[i])
                
            if cv1 > cv2:
                return 1
            if cv1 < cv2:
                return -1
        return 0

发表于 2022-03-03 09:03:10 回复(0)
def compare(self , version1: str, version2: str) -> int:
        # write code here
        s1 = list(map(int,version1.split('.')))
        s2 = list(map(int,version2.split('.')))
        if len(s1) > len(s2):
            for i in range(len(s1)-len(s2)):
                s2.append(0)
        elif len(s1) < len(s2):
            for i in range(len(s2)-len(s1)):
                s1.append(0)
        if s1 == s2:
            return 0
        for i in range(len(s1)):
            if s1[i] > s2[i]:
                return 1
                break
            elif s1[i] < s2[i]:
                return -1
                break
            else:
                continue


发表于 2022-02-25 21:46:46 回复(0)
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        # write code here
        version1, version2 = version1.split('.'), version2.split('.') # 分割字符串
        m, n = len(version1),len(version2) # 将两数组pad0至一样长
        if m<n: version1 += ['0']*(n-m)
        elif m > n: version2 += ['0']*(m-n)
        for i in range(max(m,n)): # 从前向后比较数值大小
            if int(version1[i]) > int(version2[i]): return 1
            if int(version1[i]) < int(version2[i]): return -1
        return 0
发表于 2021-12-27 10:22:06 回复(0)
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        # write code here
        v1 = version1.split(".")
        v2 = version2.split(".")
        
        len_v1, len_v2 = len(v1), len(v2)
        
        for idx in range(min(len_v1, len_v2)):
            if int(v1[idx]) == int(v2[idx]):
                pass
            elif int(v1[idx]) > int(v2[idx]):
                return 1
            else:
                return -1
        
        v1, v2 = v1[idx+1:], v2[idx+1:]
        
        if len(v2) == len(v1):
            return 0
        
        if len(v2) == 0 and sum([int(i) for i in v1]) != 0:
            return 1
        elif len(v1) == 0 and sum([int(i) for i in v2]) != 0:
            return -1
        else:
            return 0

发表于 2021-11-15 21:18:11 回复(0)
class Solution:
    def compare(self, version1, version2 ):
        version1 = [int(str(i)) for i in version1.split('.')]
        version2 = [int(str(i)) for i in version2.split('.')]
        l1 = len(version1)
        l2 = len(version2)
        if l1 < l2:
            for i in range(l2 - l1):
                version1.append(0)
        else:
            for i in range(l1 - l2):
                version2.append(0)
        for i in range(len(version1)):
            if version1[i] < version2[i]:
                return -1
                break
            elif version1[i] > version2[i]:
                return 1
                break
            elif (version1[i] == version2[i]) and (i + 1 != len(version1)):
                pass
            else:
                return 0

发表于 2021-10-26 15:43:34 回复(0)

问题信息

上传者:牛客332641号
难度:
23条回答 11667浏览

热门推荐

通过挑战的用户

查看代码